package eventos.aceptar;

import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;

import javax.swing.JOptionPane;

import logica.EntidadRepetidaException;
import logica.IdExternoInexistenteException;
import logica.Jerarquia;
import logica.JerarquiaException;
import logica.SinNombreException;

import controlador.IControladorJerarquia;
import controlador.NoExisteEntidadGraficable;

import vista.objetos.JerarquiaGraficable;
import vista.objetos.NoEsObjetoDiagramableException;
import vista.objetos.NoEsObjetoNodoException;
import vista.objetos.ObjetoGraficableRepetidoException;
import vista.paneles.NingunElementoSeleccionadoException;
import vista.ventanas.VentanaJerarquia;

public class EventoAceptarJerarquiaNueva  extends MouseAdapter {
	
	private VentanaJerarquia ventana;
	private IControladorJerarquia controlador;
	
	public EventoAceptarJerarquiaNueva(VentanaJerarquia ventana, IControladorJerarquia controlador)
	{
		super();
		this.ventana = ventana;
		this.controlador = controlador;
	}
	
	public void mouseClicked(MouseEvent e)
	{
		Jerarquia jerarquia;
		
		try 
		{
			jerarquia = this.ventana.getJerarquia();

			this.controlador.verificarSiSePuedeAgregarObjeto(jerarquia);

			JerarquiaGraficable jerarquiaGraf = new JerarquiaGraficable(jerarquia);
			
			this.controlador.agregarObjetoAlModelo(jerarquiaGraf);
			this.controlador.getProyectoActual().agregarEntidadesGraficables(jerarquiaGraf);
			this.controlador.dibujarJerarquia(jerarquiaGraf);
			
			this.ventana.setVisible(false);
			this.ventana = null;	
		}
		catch (EntidadRepetidaException e1) 
		{
			JOptionPane.showMessageDialog(this.ventana, e1.getMessage(), "Error en Identificadores Externos", JOptionPane.ERROR_MESSAGE);
		}
		catch (JerarquiaException e1) 
		{
			JOptionPane.showMessageDialog(this.ventana, e1.getMessage(), "Error al crear la Jerarquia", JOptionPane.ERROR_MESSAGE);
		}
		catch (NingunElementoSeleccionadoException e1) 
		{
			JOptionPane.showMessageDialog(this.ventana, e1.getMessage(), "Error al crear la Jerarquia", JOptionPane.ERROR_MESSAGE);
		}	
		catch (SinNombreException e1)
		{ //se supone que nunca debería pasar.
			JOptionPane.showMessageDialog(this.ventana, e1.getMessage(), "Error al crear la Jerarquia", JOptionPane.ERROR_MESSAGE);
		}
		catch (IdExternoInexistenteException e1) 
		{//se supone que con esta interfaz no podría pasar
			JOptionPane.showMessageDialog(this.ventana, e1.getMessage(), "Error Inesperado", JOptionPane.ERROR_MESSAGE);
		}
		catch (NoEsObjetoDiagramableException e1)
		{// se supone que no deberia pasar
			JOptionPane.showMessageDialog(this.ventana, e1.getMessage(), "Error Inesperado", JOptionPane.ERROR_MESSAGE);
		} 
		catch (NoEsObjetoNodoException e1) 
		{
			JOptionPane.showMessageDialog(this.ventana, e1.getMessage(), "Error Inesperado", JOptionPane.ERROR_MESSAGE);
		} 
		catch (NoExisteEntidadGraficable e1) 
		{
			JOptionPane.showMessageDialog(this.ventana, e1.getMessage(), "Error Inesperado", JOptionPane.ERROR_MESSAGE);
		} 
		catch (ObjetoGraficableRepetidoException e1)
		{
			JOptionPane.showMessageDialog(this.ventana, e1.getMessage(), "Graficable Existente", JOptionPane.ERROR_MESSAGE);
		}
	}
}
